<?php

namespace Sbm\ControlPanel;

/**
 * Класс для работы с шаблоном страницы
 * 
 * Использование:
 * // В файле index.php создаём оъект и устанавливаем его свойства
 * $layout = new Layout();
 * // добавляем CSS для вывода в шаблоне
 * $layout->AddCSS('./jscss/index.css');
 * // добавляем JS для вывода в шаблоне
 * $layout->AddJS('./jscss/jquery.js');
 * // устанавливаем список ошибок равный массиву
 * $layout->SetErrors(array('текст ошибки 1','текст ошибки 2'));
 * // добавляем одну ошибку в список ошибок 
 * $layout->AddError('текст ошибки 3');
 * // добавляем массив ошибок
 * $layout->AddErrors(array('текст ошибки 4','текст ошибки 5'));
 * // добавляем сообщение пользователю
 * $layout->SetMessage('привет пользователь');
 * 
 * 
 * print $layout->GetCSS();
 * 
 */
class Layout
{

	/**
	 * Meta-title страницы
	 * @var <string>
	 */
	private $title;

	/**
	 * Meta-keywords страницы
	 * @var <string>
	 */
	private $keywords;

	/**
	 * Meta-description страницы
	 * @var <string>
	 */
	private $desciption;

	/**
	 * Список CSS файлов страницы
	 * @var <array>
	 */
	private $css;

	/**
	 * Список JS файлов страницы
	 * @var <array>
	 */
	private $js;

	/**
	 * Использовать-ли $_SESSION для хранения $errors и $messages,
	 * Если true, то сообщение пользователю запоминается до тех пор пока оно не будет удалено методом DeleteSessionVar('var_name');
	 * 
	 * @var <boolean>
	 */
	public $use_session = true;

	/**
	 * Возвращает объект Layout для отображения основных блоков страницы.
	 * Например для вывода мета тэгов, CSS и JS файлов, сообщения об ршибках и т.п.
	 *  
	 * @return Layout
	 */
	function __construct()
	{
		if ( $this->use_session )
		{
			$this->SessionStart();
		}
	}

	/*	 * ***
	 * Функции для meta тегов
	 */

	/**
	 * Добавляет CSS файл, для вывода шаблоне 
	 * @param string $css_file
	 * @return void
	 */
	public function AddCSS( $css_file )
	{
		$this->css[] = $css_file;
	}

	/**
	 * Добавляем JS файл, для вывода в шаблоне
	 * 
	 * @param string $js_file
	 * @return void
	 */
	public function AddJS( $js_file )
	{
		$this->js[] = $js_file;
	}

	/**
	 * Устанавливает meta title страницы ($this->title)
	 * @param string $title
	 * @return void
	 */
	public function SetTitle( $title )
	{
		$this->title = $title;
	}

	/**
	 * Возвращает meta title страницы ($this->title)
	 * 
	 * @return string
	 */
	public function GetTitle()
	{
		return $this->title;
	}

	/**
	 * Устанавливает meta keywords страницы ($this->keywords)
	 * @param string $keywords
	 * @return void
	 */
	public function SetKeywords( $keywords )
	{
		$this->keywords = $keywords;
	}

	/**
	 * Возвращает meta keywords страницы ($this->keywords)
	 * 
	 * @return string
	 */
	public function GetKeywords()
	{
		return $this->keywords;
	}

	/**
	 * Устанавливает meta desciption страницы ($this->desciption)
	 * @param string $desciption
	 * @return void
	 */
	public function SetDescription( $desciption )
	{
		$this->desciption = $desciption;
	}

	/**
	 * Возвращает meta description страницы ($this->description)
	 * 
	 * @return string
	 */
	public function GetDescription()
	{
		return $this->desciption;
	}

	/**
	 * Возвращает html-код для вывода списка CSS файлов
	 * 
	 * @return string
	 */
	public function GetCSS()
	{
		$str = '';
		foreach ((array) $this->css as $css_file)
		{
			$str.="<link href='" . $css_file . "' type='text/css' rel='stylesheet'/>\n";
		}
		return $str;
	}

	/**
	 * Возвращает html-код для вывода списка JS файлов
	 * 
	 * @return string
	 */
	public function GetJS()
	{
		$str = '';
		foreach ((array) $this->js as $k => $v)
		{
			$str.="<script src='" . $v . "' type='text/javascript'></script>\n";
		}
		return $str;
	}

	/*	 * ***
	 * Функции для работы с сессиями
	 */

	/**
	 * Стартует сессию, этот метод должен выполняться в самом начале скрипта
	 * 
	 * @return void
	 */
	public function SessionStart()
	{
		session_start();
	}

	/**
	 * Сохраняет переменную в сессию,
	 * @param string $var  - имя переменной
	 * @param $message - любой объект, который нужно сохранять
	 * @return unknown_type
	 */
	public function SetSessionVar( $var, $message )
	{
		$_SESSION[$var] = base64_encode(serialize($message));
	}

	/**
	 * Возвращает переменную из сесси
	 * @param $var
	 * @return unknown_type
	 */
	public function GetSessionVar( $var )
	{

		if ( isset($_SESSION[$var]) )
		{
			$message = unserialize(base64_decode($_SESSION[$var]));
			return $message;
		}
		else
		{
			return false;
		}
	}

	/**
	 * Удаляет из сесси переменную
	 * @param $var
	 * @return unknown_type
	 */
	public function DeleteSessionVar( $var )
	{
		if ( isset($_SESSION[$var]) )
		{
			unset($_SESSION[$var]);
		}
	}

}

?>